function Zhang(options={}){
    this.$options = options;
    this.$data = options.data || {};
    this.init(options);
}
Zhang.prototype.init = function(options){
    this.initMethods();// 初始化方法，将methods中的方法放置到实例当中
    this.initState();// 为当前的实例增加属性，属性使用了代理

    if(options.created) options.created.call(this);
}
Zhang.prototype.initState = function(){
    // 设置数据
    if(this.$options.data){
        let arr =  Object.keys(this.$options.data);// [a,b]
        let length = arr.length;// 2
        while (length--){// 2
            this.proxy("$data",arr[length]);// arr[1]
        }


        // for(let key in this.$options.data){
        //     this.proxy("$data",key);
        // }
    }
}
Zhang.prototype.initMethods = function(){
    if(this.$options.methods){
        for(let key in this.$options.methods){
            this[key]=this.$options.methods[key];
        }
    }
}
Zhang.prototype.proxy = function(source,key){
    Object.defineProperty(this,key,{
        get(){
            return this[source][key];
        },
        set(v){
            this[source][key] = v;
        }
    })
}


// function Zhang(options={}){
//     this.$options = options;
//     this.$data = options.data || {};
//     if(options.methods){
//         for(let key in options.methods){
//             this[key]=options.methods[key];
//         }
//     }
//
//     // 设置数据
//     if(options.data){
//         for(let key in options.data){
//             Object.defineProperty(this,key,{
//                 get(){
//                     return this.$data[key];
//                 },
//                 set(v){
//                     this.$data[key] = v;
//                 }
//             })
//         }
//     }
//
//     if(options.created) options.created.call(this);
// }